Vlakna - SYNASER - thread safety?

Otázka od: Ing. Jiri Sokol

19. 10. 2004 10:18

Ahoj do tretice.
Jeste dotaz k synaseru, jestli nedelam neco spatne. Omlouvam za tolik dotazu,
ale zacina mi zlobit aplikace a ja si uz nevim rady. Dekuji za pochopeni a Vase
rady.
Hlavni vlakno aplikace otevre spojeni na COM port a dale s nim jiz napracuje.
Pak mam dve "podrizene" vlakna, ktere podle stanoveneho workflow s timto portem
obcas pracuji. Mam osetreno, ze se nemuze stat, aby se obe vlkana v jednu
chvili snazili neco posilat nebo neco cist z tohoto portu.
Nicmene mam dotaz, jestli je toto je "ciste" reseni a nehrori mi nejaky
problem. Ptam se dost zjistne, protoze maly problem mam a nevim, kde je
problem.
Moc Vam vsem diky
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.0
programator amater



Odpovedá: wetty@quick.cz

19. 10. 2004 10:37

Zdravim,

osobne bych pro komunikaci udelal jeden thread a roydilne akce bych rozlisil
pomoci eventu.

Petr

Ing. Jiri Sokol napsal(a):

>Nicmene mam dotaz, jestli je toto je "ciste" reseni a nehrori mi nejaky
problem. Ptam se dost zjistne, protoze maly problem mam a nevim, kde je
problem.
>



Odpovedá: Lukas Gebauer

19. 10. 2004 11:18

> Jeste dotaz k synaseru, jestli nedelam neco spatne. Omlouvam za tolik
> dotazu, ale zacina mi zlobit aplikace a ja si uz nevim rady. Dekuji za
> pochopeni a Vase rady. Hlavni vlakno aplikace otevre spojeni na COM
> port a dale s nim jiz napracuje. Pak mam dve "podrizene" vlakna, ktere
> podle stanoveneho workflow s timto portem obcas pracuji. Mam osetreno,
> ze se nemuze stat, aby se obe vlkana v jednu chvili snazili neco
> posilat nebo neco cist z tohoto portu. Nicmene mam dotaz, jestli je
> toto je "ciste" reseni a nehrori mi nejaky problem. Ptam se dost
> zjistne, protoze maly problem mam a nevim, kde je problem.

No fuj, podobnermu pouzivani se opravdu vyhni. Spravne reseni je mit
jeden thread, k Synaseru pristupova vyhradne z toho jednoho threadu.
Tedy i vytvareni a likvidace objektu Synaseru delej zase v ramci toho
jednoho threadu. Z ostatnuich mist programu uz pak jensignalizuj tomu
komunikacnimuthreadu, co chces aby delal, stejne tak si nech
signalizovat zpet, ze pozadovana operace uz probehla.

Ono to pochopitelne jde delat podobne, jak to delas ted ty, ale je
tam mnoho mist, kde muzes udelat chybu, a bez detailni znalosti toho
co se deje v Synaseru potazmo ve WIN32 API se do toho nepoustej.


--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.


Odpovedá: Ing. Jiri Sokol

19. 10. 2004 13:17

> Od: Lukas Gebauer <gebylist@mlp.cz>
> Datum: 19.10.2004 12:25:09

> No fuj, podobnermu pouzivani se opravdu vyhni. Spravne reseni je mit
> jeden thread, k Synaseru pristupova vyhradne z toho jednoho threadu.
> Tedy i vytvareni a likvidace objektu Synaseru delej zase v ramci toho
> jednoho threadu. Z ostatnuich mist programu uz pak jensignalizuj tomu
> komunikacnimuthreadu, co chces aby delal, stejne tak si nech
> signalizovat zpet, ze pozadovana operace uz probehla.
>
> --
> Lukas Gebauer.

Ahoj.
No jo, ale kdyz ty vlakna nebezi v kuse - proved akci a uvolni se. Je v nich
preddefinovana urcita akcea tu potrebuju provadet v ruznych intervalech.
Ruznych. Jedno je hodne casove narocne, druhe mene.
Rozhozeni do dvou vlakne bych rad zachoval.
Muzes mi teda rict, jak narocne na vykon je otevreni a znovu zavreni portu?
Jedno vlkano jede v intervalech cca co 2s a druhe podle nastaveni v ini. Mam
zabezpecene, ze nedochazi ke kolizi. Jede-li jedno, nejede druhe. Pokud jede
jedno a melo by jiz jet druhe, bude spusteno okamzite az dojedo to prvni.
Mohl bych to treba resit soustavnym oteviranim a zaviranim portu? Co si o tom
myslite?

Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.1
programator amater


Odpovedá: Milan Tomes

19. 10. 2004 13:09

No a co to udelat tak, ze budes mit ona dve vlakna a dalsi, ktere bude
urcene jen pro komunikaci. Pak staci toto vlakno vytvorit defacto jako
singular a mas po problemu. Samozrejme zachovas synchronizaci pri pristupu k
tomuto vlaknu, ale muzes ji presunout prave na jedno misto a nikoliv ji mit
na mistech dvou...

S pozdravem

Milan Tomes

> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of Ing. Jiri Sokol
> Sent: Tuesday, October 19, 2004 1:40 PM
>
> No jo, ale kdyz ty vlakna nebezi v kuse - proved akci a uvolni
> se. Je v nich preddefinovana urcita akcea tu potrebuju provadet v
> ruznych intervalech. Ruznych. Jedno je hodne casove narocne, druhe mene.
> Rozhozeni do dvou vlakne bych rad zachoval.
> Muzes mi teda rict, jak narocne na vykon je otevreni a znovu
> zavreni portu? Jedno vlkano jede v intervalech cca co 2s a druhe
> podle nastaveni v ini. Mam zabezpecene, ze nedochazi ke kolizi.
> Jede-li jedno, nejede druhe. Pokud jede jedno a melo by jiz jet
> druhe, bude spusteno okamzite az dojedo to prvni.
> Mohl bych to treba resit soustavnym oteviranim a zaviranim portu?
> Co si o tom myslite?